package com.bing.java.synchronizeds;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 
 * @author bing
 *
 *         2019年11月9日 上午10:49:52
 * 
 *         3. 同步一个类 作用于整个类，也就是说两个线程调用同一个类的不同对象上的这种同步语句，也会进行同步。
 */
public class SynchronizedExample2 {

	public void func2() {
		synchronized (SynchronizedExample.class) {
			for (int i = 0; i < 10; i++) {
				System.out.print(i + " ");
			}
		}
	}

	/**
	 * 4. 同步一个静态方法 作用于整个类。
	 */

	public synchronized static void fun() {
		// ...
	}

	public static void main(String[] args) {
		SynchronizedExample2 e1 = new SynchronizedExample2();
		SynchronizedExample2 e2 = new SynchronizedExample2();
		ExecutorService executorService = Executors.newCachedThreadPool();
		executorService.execute(() -> e1.func2());
		executorService.execute(() -> e2.func2());
	}
}
